// utils/md5.go
// 该包提供了一个简单的MD5加密功能
package utils

import (
	"crypto/md5"   // 导入crypto/md5包，用于生成MD5哈希值
	"encoding/hex" // 导入encoding/hex包，用于将字节切片编码为十六进制字符串
)

// EncryptionMd5 函数接收一个字符串作为输入，并返回其MD5哈希值的十六进制表示形式
// 参数:
//
//	s: 需要进行MD5加密的原始字符串
//
// 返回值:
//
//	string: 输入字符串的MD5哈希值，以十六进制字符串的形式返回
func EncryptionMd5(s string) string {
	// 创建一个新的MD5哈希对象
	// md5.New() 返回一个实现了hash.Hash接口的对象，可以用来写入数据并计算哈希值
	ctx := md5.New()

	// 将输入字符串转换为字节切片，并写入到MD5哈希对象中
	// Write方法会将提供的字节添加到哈希计算中
	ctx.Write([]byte(s))

	// 计算最终的哈希值
	// Sum方法返回追加了当前哈希值（追加到提供的字节切片后面）的结果
	// 由于我们不需要在前面追加任何内容，所以传入nil
	// hex.EncodeToString函数将字节切片转换为对应的十六进制字符串
	return hex.EncodeToString(ctx.Sum(nil))
}

// 注意: MD5算法由于存在安全漏洞（如碰撞攻击），不推荐用于安全性要求较高的场景
// 对于密码存储等安全敏感的应用，建议使用更安全的哈希算法，如bcrypt、scrypt或Argon2
